package fr.miage.dao.traitements;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

import fr.miage.client.metier.entite.Admin;
import fr.miage.client.metier.entite.Categorie;
import fr.miage.client.metier.entite.Civilite;
import fr.miage.client.metier.entite.Client;
import fr.miage.client.metier.entite.Commande;
import fr.miage.client.metier.entite.Produit;
import fr.miage.client.metier.entite.Role;
import fr.miage.client.metier.entite.Ville;

/**
 * @author kristela
 *
 */
public class VilleDao {

	/**
	 * Retourne une session.
	 * 
	 * @return la session.
	 */
	public static Session getSession() {
		Configuration config = new Configuration();
		config.addClass(Client.class);
		config.addClass(Commande.class);
//		config.addClass(Lignecommande.class);
		config.addClass(Produit.class);
		config.addClass(Admin.class);
		config.addClass(Categorie.class);
		config.addClass(Civilite.class);
		config.addClass(Role.class);
		config.addClass(Ville.class);
		SessionFactory sessionFactory = config.buildSessionFactory();
		Session session = sessionFactory.openSession();
		return session;
	}

	/**
	 * Ajoute un nouveau ville dans la base de donnees.
	 * 
	 * @param ville
	 *            le admin a ajouter.
	 */
	public static void insertVille(Ville ville) {
		Session session = getSession();
		if (session == null) {
			System.out.println("Pas de connexion!");
			System.exit(0);
		}
		Transaction tx = null;
		try {
			tx = session.beginTransaction();
			session.save(ville);
//			int s=session.createSQLQuery("INSERT INTO Admin VALUES("+admin.getIdAdmin()+",\""+ville.getNom()+"\");").executeUpdate();
			tx.commit();
		} catch (Exception e) {
			if (tx != null) {
				tx.rollback();
			}
			e.printStackTrace();
		} finally {
			session.close();
		}

		session.getSessionFactory().close();
	}


	
	//a voir
	public static Ville selectVille(Ville ville){
		Session session=getSession();
		if (session == null) {
			System.out.println("Pas de connexion!");
			System.exit(0);
		}
//	Categorie ville = session.load(Ville.class, ville);
//		Integer idVille= (Integer)session.createSQLQuery("SELECT idVille FROM ville WHERE ville=\""+ville.getIdVille()+"\";").uniqueResult();
		Ville cLoad=new Ville();
		session.load(cLoad, ville.getIdVille());
		session.close();
		session.getSessionFactory().close();
		return cLoad;
	}

	/**
	 * Renvoie la liste de touts les admins.
	 * 
	 * @return tous les admins.
	 */
	public static List<Ville> selectAllVille() {
		List<Ville> listVille = new ArrayList<Ville>();
		Session session=getSession();
		if (session == null) {
			System.out.println("Pas de connexion!");
			System.exit(0);
		}
		listVille=(List<Ville>)session.createQuery("Select v from Ville v").list(); 

//		listAdmin =session.createSQLQuery("SELECT * FROM Ville;").list();
		session.close();
		session.getSessionFactory().close();
		return listVille;
	}

	/**
	 * Effacer le compte epargne correspondant a un numero.
	 * 
	 * @param numero
	 *            le numero du compte.
	 */
	public static void deleteVille(Ville ville) {
		Session session=getSession();
		if (session == null) {
			System.out.println("Pas de connexion!");
			System.exit(0);
		}else{
			session.delete(ville);
		}
		session.close();
		session.getSessionFactory().close();
	}
	
	public static void updateVille(Ville ville) {
		Session session=getSession();
		if (session == null) {
			System.out.println("Pas de connexion!");
			System.exit(0);
		}else{
			session.update(ville);
		}
		session.close();
		session.getSessionFactory().close();
	}
	
	public static String getVilleCritere(Ville ville){
		StringBuffer sql=new StringBuffer("SELECT FROM VILLE WHERE idVille="+ville.getIdVille()+" ");
		if (ville.getCp()!=null) {
			sql.append("AND cp=\""+ville.getCp()+"\" ");
		}	
		if (new Double(ville.getEloignement())!=null) {
			sql.append("AND eloignement="+ville.getEloignement()+" ");
		}
		if (ville.getInsee()!=null) {
			sql.append("AND insee=\""+ville.getInsee()+"\" ");
		}
		if (new Double(ville.getLatitude())!=null) {
			sql.append("AND latitude="+ville.getLatitude()+" ");
		}
		if (new Double(ville.getLongitude())!=null) {
			sql.append("AND longitude="+ville.getLongitude()+" ");
		}
		if (ville.getMaj()!=null) {
			sql.append("AND maj=\""+ville.getMaj()+"\" ");
		}
		if (ville.getNom()!=null) {
			sql.append("AND nom=\""+ville.getNom()+"\" ");
		}
		if (ville.getRegion()!=null) {
			sql.append("AND region=\""+ville.getRegion()+"\" ");
		}
		sql.append(";");
		return sql.toString();
	}
//	public static void main(String[] args) {
//		Ville ville = new Ville(1);
////		VilleDao.insertVille(ville);
////		Ville v=selectVille(ville);
//		List<Ville> v=selectAllVille();
//		System.out.println(v);
//	}
}
